// const Promise = require("./Promise");

// 1、异步调用问题
// let p = new Promise((resolve, reject) => {
//   //   throw new Error("异常了");
//   //   resolve("成功了");
//   //   reject("失败了");
//   setTimeout(() => {
//     resolve("成功了");
//   }, 0);
// });
// p.then(
//   (sucess) => {
//     console.log(sucess, "sucess");
//   },
//   (fill) => {
//     console.log(fill, "fill");
//   }
// );
// p.then(
//   (sucess) => {
//     console.log(sucess, "sucess");
//   },
//   (fill) => {
//     console.log(fill, "fill");
//   }
// );

//   2、链式调用
// let p = new Promise((resolve, reject) => {
//   resolve("成功");
//   // reject("失败");
// });
// p.then(
//   (data) => {
//     console.log(data, "t1");
//     throw new Error("异常");
//     return data;
//   },
//   (err) => {
//     console.log(err, "e1");
//     return err;
//   }
// ).then(
//   (data) => {
//     console.log(data, "t2");
//   },
//   (err) => {
//     console.log(err, "e2");
//   }
// );
//

//   3、then 不传递参数
// let p = new Promise((resolve, reject) => {
//   resolve("ok");
//   // reject("失败了");
// });
// p.then()
//   .then()
//   .then(
//     (data) => {
//       console.log(data, "d2");
//     },
//     (err) => {
//       console.log(err, "e2");
//     }
//   );

//   4、then中返回值为Promise
// let p = new Promise((resolve, reject) => {
//   resolve("成功");
//   // reject("失败");
// });
// p.then(
//   (data) => {
//     return new Promise((resolve, reject) => {
//       resolve(
//         new Promise((resolve, reject) => {
//           resolve(
//             new Promise((resolve, reject) => {
//               resolve("ok");
//             })
//           );
//         })
//       );
//     });
//   },
//   (err) => {
//     console.log(err);
//   }
// ).then(
//   (data) => {
//     console.log(data);
//   },
//   (err) => {
//     console.log(err);
//   }
// );

// 5 Promise.resolve方法
// let p = new Promise((resolve, reject) => {
//   setTimeout(() => {
//     resolve("ok");
//   }, 1000);
// });
// Promise.resolve(p).then(
//   (data) => {
//     console.log(data);
//     console.log(123)
//   },
//   (err) => {
//     console.log(err);
//   }
// );

//6 Promise.all 方法
// let p1 = new Promise((resolve, reject) => {
//   resolve("p1");
// });
// let p2 = new Promise((resolve, reject) => {
//   // resolve("p2");
//   reject("失败");
// });
// Promise.all([{a:1}, p1, p2, 3]).then(
//   (data) => {
//     console.log(data);
//   },
//   (err) => {
//     console.log(err);
//   }
// );

// Promise的finally
Promise.resolve(123)
  .finally((data) => {
    console.log(data, "finally");
    return new Promise((resolve, reject) => {
      // resolve("ok");
      reject("err");
    });
  })
  .then(
    (data) => {
      console.log(data, "data");
    },
    (err) => {
      console.log(err, "err");
    }
  );
